<?php

namespace App\Traits;

// trait JsonResponse
// {
//     public function successful($msg = 'ok', $data = null)
//     {
//         if (is_null($data) && !is_string($msg)) {
//             [$data, $msg] = [$msg, 'ok'];
//         }

//         return $this->make(200, $msg, $data);
//     }

//     public function fail($msg = 'error', $data = null, int $code = 500)
//     {
//         if (is_null($data) && !is_string($msg)) {
//             [$data, $msg] = [$msg, 'Error'];
//         }

//         return $this->make($code, $msg, $data);
//     }

//     public function make($code, $msg, $data): string
//     {
//         compact('code', 'msg', 'data')
//         return response()->json($body, 200, $headers, $options);
//         return json_encode(, JSON_UNESCAPED_UNICODE);
//     }
// }

trait JsonResponse
{
    public function successful($data = [], $msg = 'ok', $headers = [], $options = null)
    {
        return $this->make(200, $msg, $data, $headers, $options);
    }

    public function fail($msg = 'error', $data = [], $headers = [], $options = null)
    {
        return $this->make(500, $msg, $data, $headers, $options);
    }

    public function make($code, $msg, $data, $headers = [], $options = null)
    {
        return response()->json([
            'code' => $code,
            'msg' => $msg,
            'data' => $data,
        ], 200, $headers, $options);
    }
}
